// import { Provide, Inject, Config } from '@midwayjs/core';
// import { Context } from '@midwayjs/koa';
// import * as nodemailer from 'nodemailer';
// import { CachingFactory, MidwayCache } from '@midwayjs/cache-manager';
// import { InjectClient } from '@midwayjs/core';

// @Provide()
// export class Email {
//     @Inject()
//     ctx: Context;

//     @InjectClient(CachingFactory, 'redis')
//     cache: MidwayCache; //redis缓存
//     @Config('email')
//     emailConfig;
//     // 生成随机验证码
//     generateVerifyCode(length = 6): string {
//         const characters = '0123456789';
//         let code = '';
//         for (let i = 0; i < length; i++) {
//             code += characters.charAt(Math.floor(Math.random() * characters.length));
//         }
//         return code;
//     }
//     async sendEmail(email: string, content: string) {
//         const verifyCode = this.generateVerifyCode();
//         const transporter = nodemailer.createTransport({
//             host: this.emailConfig.host,
//             port: this.emailConfig.port,
//             secure: this.emailConfig.secure,
//             auth: {
//                 user: this.emailConfig.user,
//                 pass: this.emailConfig.pass,
//             },
//         });
//         const mailOptions = {
//             from: `"SparkStack竞赛平台" <${this.emailConfig.user}>`,
//             to: email,
//             subject: '欢迎注册SparkStack竞赛平台',
//             html: `
//                 <div style="background-color: #f4f4f4; padding: 20px;">
//                     <div style="max-width: 600px; margin: 0 auto; background-color: #fff; padding: 20px; border-radius: 5px; box-shadow: 0 0 10px rgba(0,0,0,0.1);">
//                         <h2 style="color: #333; text-align: center;">欢迎注册SparkStack竞赛平台</h2>
//                         <p style="color: #666;">您好，欢迎注册SparkStack竞赛平台，您的验证码是：</p>
//                         <div style="background-color: #f9f9f9; padding: 10px; text-align: center; font-size: 24px; font-weight: bold; color: #333; margin: 20px 0; letter-spacing: 5px;">
//                             ${verifyCode}
//                         </div>
//                         <p style="color: #666;">验证码有效期为5分钟，请勿泄露给他人。</p>
//                         <p style="color: #999; font-size: 12px; text-align: center; margin-top: 20px;">此邮件由系统自动发送，请勿回复。</p>
//                     </div>
//                 </div>
//             `,
//         };
//         await transporter.sendMail(mailOptions);
//         return true;
//     }
//     // 发送验证码邮件
//     async sendVerifyCode(email: string, type: string) {
//         const savedCode = await this.cache.get(`${type}verifyCode:${email}`);
//         if (savedCode) {
//             const isverifyCode = await this.cache.get(`${type}isverifyCode:${email}`);
//             if (isverifyCode) {
//                 throw new Error('验证码已发送，请勿重复发送');
//             }
//         }
//         try {
//             // 生成验证码
//             const verifyCode = this.generateVerifyCode();
//             // 创建邮件发送器
//             const transporter = nodemailer.createTransport({
//                 host: this.emailConfig.host,
//                 port: this.emailConfig.port,
//                 secure: this.emailConfig.secure,
//                 auth: {
//                     user: this.emailConfig.user,
//                     pass: this.emailConfig.pass,
//                 },
//             });
//             // 设置邮件内容
//             const mailOptions = {
//                 from: `"SparkStack竞赛平台" <${this.emailConfig.user}>`,
//                 to: email,
//                 subject: type,
//                 html: `
//                     <div style="background-color: #f4f4f4; padding: 20px;">
//                         <div style="max-width: 600px; margin: 0 auto; background-color: #fff; padding: 20px; border-radius: 5px; box-shadow: 0 0 10px rgba(0,0,0,0.1);">
//                             <h2 style="color: #333; text-align: center;">SparkStack竞赛平台用户信息验证</h2>
//                             <p style="color: #666;">您好，您的验证码是：</p>
//                             <div style="background-color: #f9f9f9; padding: 10px; text-align: center; font-size: 24px; font-weight: bold; color: #333; margin: 20px 0; letter-spacing: 5px;">
//                                 ${verifyCode}
//                             </div>
//                             <p style="color: #666;">验证码有效期为5分钟，请勿泄露给他人。</p>
//                             <p style="color: #999; font-size: 12px; text-align: center; margin-top: 20px;">此邮件由系统自动发送，请勿回复。</p>
//                         </div>
//                     </div>
//                 `,
//             };
//             // 发送邮件
//             await transporter.sendMail(mailOptions);
//             await this.cache.set(`${type}verifyCode:${email}`, verifyCode, 300000);
//             await this.cache.set(`${type}isverifyCode:${email}`, true, 60000);
//             return true;
//         } catch (error) {
//             console.error('发送验证码邮件失败:', error);
//             return false;
//         }
//     }

//     // 验证验证码
//     async verifyCode(type: string, email: string, code: string): Promise<boolean> {
//         const savedCode = await this.cache.get(`${type}verifyCode:${email}`);
//         console.log('savedCode:', savedCode, 'code:', code);
//         if (!savedCode) throw new Error('验证码不存在或已过期');
//         if (savedCode === code) {
//             await this.cache.del(`${type}verifyCode:${email}`);
//             return true;
//         }
//         return false;

//     }

//     // 发送状态变更邮件
//     async sendStateEmail(email: string, name: string, opusName: string, state: string) {
//         try {
//             const transporter = nodemailer.createTransport({
//                 host: this.emailConfig.host,
//                 port: this.emailConfig.port,
//                 secure: this.emailConfig.secure,
//                 auth: {
//                     user: this.emailConfig.user,
//                     pass: this.emailConfig.pass,
//                 },
//             });
//             const mailOptions = {
//                 from: `"SparkStack竞赛平台" <${this.emailConfig.user}>`,
//                 to: email,
//                 subject: `${name}队伍状态更新通知`,
//                 html: `
//                         <div style="background-color: #f4f4f4; padding: 20px;">
//                             <div style="max-width: 600px; margin: 0 auto; background-color: #fff; padding: 20px; border-radius: 5px; box-shadow: 0 0 10px rgba(0,0,0,0.1);">
//                                 <h2 style="color: #333; text-align: center;">队伍状态更新通知</h2>
//                                 <p style="color: #666;">您好!您的队伍${name}及其作品《${opusName}》的比赛状态已更新为：</p>
//                                 <div style="background-color: #f9f9f9; padding: 10px; text-align: center; font-size: 24px; font-weight: bold; color: #333; margin: 20px 0;">
//                                     ${state}
//                                 </div>
//                                 <p style="color: #999; font-size: 12px; text-align: center; margin-top: 20px;">此邮件由系统自动发送，请勿回复。</p>
//                             </div>
//                         </div>
//                     `,
//             };
//             await transporter.sendMail(mailOptions);
//             return true;
//         } catch (error) {
//             console.error('发送状态更新邮件失败:', error);
//             return false;
//         }
//     }
// }